home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / admin / accounts / adduser.000 / adduser / adduser.shadow.1.5 / xfdes.h < prev   
Encoding:
C/C++ Source or Header  |  1996-05-10  |  5.5 KB  |  185 lines

  1. /****************************************************************************\
  2. **      XFDES.H - FAST DES ENCRYPTION ALOGRITHM FUNCTIONS FOR TURBO-C       **
  3. ******************************************************************************
  4. **             VAX/FDES Routines Modified By Doctor Dissector               **
  5. ******************************************************************************
  6. ** Copyright (c) 1991, By Doctor Dissector            Last Update: 03/04/91 **
  7. \****************************************************************************/
  8.  
  9. /*
  10. ** XFDES - Version 1.05
  11. ** Copyright 1991 By Doctor Dissector
  12. **
  13. ** This program is free software; you can redistribute it and/or modify
  14. ** it under the terms of the GNU General Public License as published by
  15. ** the Free Software Foundation; either version 1, or (at your option)
  16. ** any later version.
  17. **
  18. ** This program is distributed in the hope that it will be useful,
  19. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21. ** GNU General Public License for more details.
  22. **
  23. ** You should have received a copy of the GNU General Public License
  24. ** along with this program; if not, write to the Free Software
  25. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  26. */
  27.  
  28. char xfdes_h_msg[]="xfdes v1.05 - 4/3/91 - (c)1991 - filename: xfdes.h";
  29.  
  30. /*=[ Definitions ]==========================================================*/
  31.  
  32. #define reg     register
  33. #define uns     unsigned
  34. #define unsb    uns     char
  35. #define unsl    uns     long
  36.  
  37. /* I don't wish to include a big .h just for this definition */
  38. #ifndef NULL
  39. #define NULL    0
  40. #endif
  41.  
  42. /* Types for the different ways to represent DES bit patterns.
  43. ** Bits are always right justified within fields.
  44. */
  45.  
  46. #define obpb1   unsb    /* One bit per byte. */
  47. #define sbpb6   unsb    /* Six bits per byte, 6 held. */
  48. #define sbpb6R  unsb    /* Six bits per byte Reversed order, 6 held. */
  49. #define sbpb24  unsl    /* Six bits per byte, 24 held. */
  50. #define ebpb24  unsl    /* Eight bits per bit, 24 held. */
  51. #define fbpb4   unsb    /* Four bits per byte, 4 held. */
  52. #define fbpb4R  unsb    /* Four bits per byte Reversed order, 4 held. */
  53.  
  54. /*=[ Data Tables ]==========================================================*/
  55.  
  56. /* Final permutation, FP=IP^(-1)  - changed index from 1 to 0 */
  57. unsb FP[] =
  58.  {
  59.   39, 7,47,15,55,23,63,31,
  60.   38, 6,46,14,54,22,62,30,
  61.   37, 5,45,13,53,21,61,29,
  62.   36, 4,44,12,52,20,60,28,
  63.   35, 3,43,11,51,19,59,27,
  64.   34, 2,42,10,50,18,58,26,
  65.   33, 1,41, 9,49,17,57,25,
  66.   32, 0,40, 8,48,16,56,24,
  67.  };
  68.  
  69. /* Permuted-choice 1 from the key bits to yield C and D.
  70. ** Note that bits 8,16... are left out: They are intended for a parity check.
  71. ** Not zero based!
  72. */
  73. /* Modified 2/2/91 - DD */
  74.  
  75. static unsb PC1_C[] =
  76.  {
  77.   56,48,40,32,24,16, 8,
  78.    0,57,49,41,33,25,17,
  79.    9, 1,58,50,42,34,26,
  80.   18,10, 2,59,51,43,35,
  81.  };
  82.  
  83. static unsb PC1_D[] =
  84.  {
  85.   62,54,46,38,30,22,14,
  86.    6,61,53,45,37,29,21,
  87.   13, 5,60,52,44,36,28,
  88.   20,12, 4,27,19,11, 3,
  89.  };
  90.  
  91. /* Permuted-choice 2, pick out bits from CD array to generate key schedule. */
  92. /* Modified 2/2/91 - DD */
  93.  
  94. static unsb PC2_C[] =
  95.  {
  96.   13,16,10,23, 0, 4,
  97.    2,27,14, 5,20, 9,
  98.   22,18,11, 3,25, 7,
  99.   15, 6,26,19,12, 1,
  100.  };
  101.  
  102. static unsb PC2_D[] =
  103.  {
  104.   12,23, 2, 8,18,26,
  105.    1,11,22,16, 4,19,
  106.   15,20,10,27, 5,24,
  107.   17,13,21, 7, 0, 3,
  108. };
  109.  
  110. /* The E bit-selection table. */
  111. unsb E[] =
  112.  {
  113.   32, 1, 2, 3, 4, 5,
  114.    4, 5, 6, 7, 8, 9,
  115.    8, 9,10,11,12,13,
  116.   12,13,14,15,16,17,
  117.   16,17,18,19,20,21,
  118.   20,21,22,23,24,25,
  119.   24,25,26,27,28,29,
  120.   28,29,30,31,32, 1,
  121.  };
  122.  
  123. /* P is a permutation on the selected combination of the current L and key. */
  124. static unsb P[] =
  125.  {
  126.   16, 7,20,21,
  127.   29,12,28,17,
  128.    1,15,23,26,
  129.    5,18,31,10,
  130.    2, 8,24,14,
  131.   32,27, 3, 9,
  132.   19,13,30, 6,
  133.   22,11, 4,25,
  134.  };
  135.  
  136. /* The 8 selection functions. */
  137. static fbpb4R S[8][64] =
  138.  {
  139.   14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7,
  140.    0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8,
  141.    4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0,
  142.   15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13,
  143.  
  144.   15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10,
  145.    3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5,
  146.    0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15,
  147.   13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9,
  148.  
  149.   10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8,
  150.   13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1,
  151.   13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7,
  152.    1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12,
  153.  
  154.    7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15,
  155.   13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9,
  156.   10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4,
  157.    3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14,
  158.  
  159.    2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9,
  160.   14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6,
  161.    4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14,
  162.   11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3,
  163.  
  164.   12, 1,10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11,
  165.   10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8,
  166.    9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6,
  167.    4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13,
  168.  
  169.    4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1,
  170.   13, 0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6,
  171.    1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2,
  172.    6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15,14, 2, 3,12,
  173.  
  174.   13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7,
  175.    1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2,
  176.    7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8,
  177.    2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11,
  178.  };
  179.  
  180. /* Sequence of shifts used for the key schedule. */
  181. static unsb shifts[] =
  182.  {
  183.   1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1,
  184.  };
  185.